package org.framework.common.api.entity;

import java.io.Serializable;
import java.util.Map;

/**
 * 实体类接口
 * <p>描述: </p>
 * <p>Company: Professional</p>
 * @author chanlong(陈龙)
 * @date 2015年12月28日 上午10:22:50
 * @version 1.0.2015
 */
public interface CommonEntityAware<ID extends Serializable> extends Serializable {
	
	/* 编码前缀 */
	public static final String CODE_PREFIX_CUSTOMER = "KH-";
	public static final String CODE_PREFIX_CONTRACT = "HT-";
	public static final String CODE_PREFIX_CLASSES = "BJ-";
	public static final String CODE_PREFIX_CENTER = "ZX-";
	public static final String CODE_PREFIX_SHOPS = "MD-";
	public static final String VERSION_PREFIX_FILE = "VER.";
	
	/* 编码序列 */
	public static final String DEFAULT_CODE_SERIAL = "0001";
	public static final String DEFAULT_VERSION_SERIAL = "1.0"; // VER.2016.1.0
	
	/* 返回状态码 */
	public static final int RETURN_ERROR = 500;
	public static final int RETURN_INVALID = 400;
	public static final int RETURN_SUCCESS = 200;

	/**
	 * 保存实体.
	 * @param bo
	 * @param jdbc
	 * @param options
	 * @return
	 * @throws Exception
	 * @author chanlong(陈龙)
	 * @date 2016年8月30日 下午12:34:39
	 */
	public Object save(final String... options) throws Exception;
	
	/**
	 * 保存实体.
	 * @param bo
	 * @param jdbc
	 * @param params
	 * @return
	 * @throws Exception
	 * @author chanlong(陈龙)
	 * @date 2016年8月30日 下午4:56:19
	 */
	public Object save(final Map<String, Object> params) throws Exception;
	
	/**
	 * 删除实体.
	 * @param bo
	 * @param jdbc
	 * @param options
	 * @return
	 * @throws Exception
	 * @author chanlong(陈龙)
	 * @date 2016年8月30日 下午12:35:07
	 */
	public Object delete(final String... options) throws Exception;

	/**
	 * 加载实体.
	 * @param bo
	 * @param jdbc
	 * @param executor
	 * @param options
	 * @return
	 * @throws Exception
	 * @author chanlong(陈龙)
	 * @date 2016年9月1日 上午11:59:22
	 */
	public Object loader(final String... options) throws Exception;
	
	/**
	 * 查询实体.
	 * @param bo
	 * @param jdbc
	 * @param executor
	 * @param options
	 * @return
	 * @throws Exception
	 * @author chanlong(陈龙)
	 * @date 2016年9月1日 下午12:29:50
	 */
	public Object query(final Map<String, Object> params, final String... options) throws Exception;
	
	/**
	 * .
	 * @return
	 * @author chanlong(陈龙)
	 * @date 2016年9月6日 上午11:08:54
	 */
	public ID getId();

	/**
	 * .
	 * @param id
	 * @author chanlong(陈龙)
	 * @date 2016年9月6日 上午11:08:59
	 */
	public void setId(ID id);
}
